package com.ruoyi.monitor.controller;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.monitor.domain.MonitorRetrievalRequest;
import com.ruoyi.monitor.service.IMonitorRetrievalRequestService;

/**
 * 监控权限管理Controller
 * 
 * @author lh
 */
@RestController
@RequestMapping("/monitor/permission")
public class MonitorPermissionController extends BaseController
{
    @Autowired
    private IMonitorRetrievalRequestService monitorRetrievalRequestService;

    /**
     * 获取当前用户可访问的地点列表
     */
    @GetMapping("/locations")
    public AjaxResult getAccessibleLocations()
    {
        // 获取当前登录用户的用户ID
        Long userId = null;
        try {
            userId = SecurityUtils.getUserId();
        } catch (Exception e) {
            // 获取用户ID异常，返回空的权限列表
            logger.error("获取用户ID异常", e);
            return AjaxResult.success(new HashMap<>());
        }
        
        // 如果是管理员，则可以访问所有地点
        if (userId != null && SecurityUtils.isAdmin(userId))
        {
            return AjaxResult.success(new HashMap<>());
        }
        
        // 用户ID为空，未登录或未认证，返回空的权限列表
        if (userId == null)
        {
            return AjaxResult.success(new HashMap<>());
        }
        
        // 查询当前用户已批准的申请
        List<MonitorRetrievalRequest> approvedRequests = monitorRetrievalRequestService.selectApprovedRequestsByUserId(userId);
        
        // 存储可访问的地点ID和是否过期的映射
        Map<Long, Boolean> accessibleLocations = new HashMap<>();
        
        // 当前日期
        Date now = new Date();
        
        // 遍历已批准的申请，获取地点ID
        for (MonitorRetrievalRequest request : approvedRequests)
        {
            // 如果地点ID为空，则跳过
            if (request.getLocationId() == null)
            {
                continue;
            }
            
            // 检查是否请求仍然有效（未过期）
            boolean isValid = isRequestValid(request, now);
            
            // 更新地点访问状态（如果已有相同地点且为有效，则保持有效状态）
            Long locationId = request.getLocationId();
            if (!accessibleLocations.containsKey(locationId) || accessibleLocations.get(locationId) == false)
            {
                accessibleLocations.put(locationId, isValid);
            }
        }
        
        return AjaxResult.success(accessibleLocations);
    }
    
    /**
     * 判断申请是否仍然有效（未过期）
     */
    private boolean isRequestValid(MonitorRetrievalRequest request, Date now)
    {
        // 检查结束日期是否为空
        if (request.getEndTime() == null)
        {
            return true; // 如果没有设置结束日期，则视为永久有效
        }
        
        // 检查当前日期是否在结束日期之前
        return now.before(request.getEndTime());
    }
} 